#include <iostream>

using namespace std;

const int MAXN = 250001;

int n;
float tree[4*MAXN];

float func(float a1, float a2) {
    return min(a1, a2);
}

void build_tree(float arr[], int v, int left, int right) { //построение дерева отрезков по массиву arr[]
    int left_child = v*2; //номера потомков вершины v в массиве tree это v*2 и v*2+1
    int right_child = v*2+1;
    if (left == right) //проверка на равенство левой и правой границ
        tree[v] = arr[left];
    else {
        int middle = (left + right) / 2;
        build_tree(arr, left_child, left, middle); //строим дерево рекурсивно для 2ух половинок отрезка left..right
        build_tree(arr, right_child, middle+1, right);
        tree[v] = func(tree[left_child], tree[right_child]); //считаем нужную нам функцию
    }
}

float sum (int v, int tl, int tr, int left, int right) { //по границам left и right ищем значении функции на данном отрезке
                                                         //tr и tv -  текущие границы для вершины с номером v
    if (left > right) //проверки для предотвращения лишних действий
        return 0;
    if (left == tl && right == tr) //если текущие левая и правая границы соответсвуют требуемым, то возвращаем значение функции для текущей вершины
        return tree[v];
    int tm = (tl + tr) / 2;
    int left_child = v*2;
    int right_child = v*2+1;
    
    if (left > min(right, tm)) //выбираем какой кусов массва нам надо разбирать(те переходить в левого или правого ребенка)
        return sum (right_child, tm+1, tr, max(left,tm+1), right);
    else if (max(left, tm + 1) > right)
        return sum (left_child, tl, tm, left, min(right, tm));
    //если требуемый отрезок не полностью содержится в правом или левом ребенке, то возвращаем значение функции от двух кусочков
    return func(sum (left_child, tl, tm, left, min(right, tm)), sum (right_child, tm+1, tr, max(left, tm+1), right));
}

int main() {
    cin >> n;
    float a[MAXN];
    
    for(int i = 0; i < n; i++)
        cin >> a[i];
    
    build_tree(a, 1, 0, n - 1);
    
    int m;
    float x, y;
    cin >> m;
    for (int i = 0; i < m; i++) {
        cin >> x >> y;
        cout << sum(1, 0, n - 1, x, y - 1) << endl;
    }
}

